package fr.musique.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import fr.musique.bean.Album;
import fr.musique.itf.AlbumItf;

@Repository("albumDao")
@Transactional
public class AlbumDaoImpl extends HibernateDaoSupport implements AlbumItf {

	@Autowired
	public AlbumDaoImpl(
			@Qualifier("sessionFactory") SessionFactory sessionFactory) {
		super.setSessionFactory(sessionFactory);
	}

	// Permet de récupérer un album de la base de données en fonction de son id
	@Override
	public Album get(int id) {
		return (Album) getHibernateTemplate().get(Album.class, id);
	}

	// Permet de récupérer tous les album de la base de données
	@Override
	@Transactional
	@SuppressWarnings("unchecked")
	public List<Album> getAll() {
		return getHibernateTemplate().find("from Album");
	}

	// Permet de récupérer tous les album de la base de données ayant pour nom
	// "titre"
	@SuppressWarnings("unchecked")
	@Override
	@Transactional
	public List<Album> getAlbum(String titre) {
		return (List<Album>) getHibernateTemplate().find(
				"from Album where titre=" + "'" + titre + "'");
	}

	// Permet de sauvegarder l'album dans la base de données
	@Override
	@Transactional
	public void save(Album alb) {
		getHibernateTemplate().saveOrUpdate(alb);
	}

	// Permet de supprimer l'album de la base de données
	@Override
	public void remove(int id) {
		Object record = getHibernateTemplate().load(Album.class, id);
		getHibernateTemplate().delete(record);
	}
}
